package com.vf.admin.common.db.annotation;

import java.lang.reflect.Field;
import java.util.Date;

import com.vf.admin.common.db.utils.PojoBySql;

public class AnnotationUtil {
	public static AnnotationUtil getInstance(){
		return new AnnotationUtil();
	}
	
	//用来解析所有成员变量的方法
	public String[] getColumns(Class clas, PojoBySql pojobysql){
		
		if(clas.isAnnotationPresent(Table.class)){
			//该class存在Table类型的注解，获取指定的表名
			Table table = (Table) clas.getAnnotation(Table.class);
			String tableName = table.name();
		}
		
		
		Field[] fArr = clas.getDeclaredFields();
		String[] columns = new String[fArr.length];
		String columnName="";
		int columnLength=0;
		String columnType = "";
		for(int i=0;i<fArr.length;i++){
			Field f = fArr[i];
			String name = f.getName(); //成员变量名
			Class type = f.getType(); //成员变量类型
			//判断该成员变量上是不是存在Column类型的注解
			if(f.isAnnotationPresent(Column.class)){
				//存在
				Column c = f.getAnnotation(Column.class);//获取实例
				//获取元素值
				columnName = c.name();
				columnLength = c.length();
			}
			//如果未指定列名，默认列名使用成员变量名
			if("".equals(columnName)){
				columnName = name;
			}
			//如果未指定字段长度，默认32
			if(0 == columnLength){
				columnLength = 32;
			}
			//如果成员变量是String类型的，数据库字段是varchar类型
			if(String.class == type){
				columnType = "varchar";
			}else if(Integer.class == type){
				columnType = "number";//Integer类型的用number
			}
			//把每一个成员变量相关信息存放到返回数组中
			if(Date.class == type){//Date类型的用date
				columns[i] = columnName+" date";
			}else{
				columns[i] =  columnName+" "+columnType+"("+columnLength+")";
			}
		}
		return columns;
	}
}
